import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import Components from 'unplugin-vue-components/vite'
import { VantResolver } from 'unplugin-vue-components/resolvers'
import postcsspxtovw from 'postcss-px-to-viewport'
import eslintPlugin from 'vite-plugin-eslint'
// https://vitejs.dev/config/
export default defineConfig({
  base: process.env.NODE_ENV === 'production' ? './' : '/',
  server: {
    host: '0.0.0.0',
    open: false,
    port: 5555,
    proxy: {
      '/api': {
        // 代理api
        target: 'http://192.168.20.25:8088', // 本地网管
        // target: "http://192.168.20.30:8088", // 张星
        // target: "http://192.168.20.234:8088", // 预发布
        changeOrigin: true, // 是否跨域
        ws: true // proxy websockets
        // rewrite: (path) => path.replace(/^\/admin/, ""),
      }
    }
  },
  // 别名
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
      // 公用功能组件
      comps: path.resolve(__dirname, 'src/components'),
      // 请求API
      api: path.resolve(__dirname, 'src/api'),
      // 页面布局组件
      layouts: path.resolve(__dirname, 'src/layouts'),
      // Vue 路由
      router: path.resolve(__dirname, 'src/router'),
      // 样式引用库
      styles: path.resolve(__dirname, 'src/styles'),
      // 工具库
      utils: path.resolve(__dirname, 'src/utils'),
      // 静态资源库
      assets: path.resolve(__dirname, 'src/assets'),
      // 视图页面
      views: path.resolve(__dirname, 'src/views'),
      // 数据持久状态库
      store: path.resolve(__dirname, 'src/store'),
      // 多应用案例（废除）
      systemPas: path.resolve(__dirname, 'src/system/pas'),
      pasLayouts: path.resolve(__dirname, 'src/system/pas/layouts')
    }
  },
  plugins: [
    vue(),
    Components({
      resolvers: [VantResolver()]
    }),
    eslintPlugin({
      include: ['src/**/*.js', 'src/**/*.vue', 'src/*.js', 'src/*.vue']
    })
  ],
  css: {
    postcss: {
      plugins: [
        postcsspxtovw({
          // 需要转换的单位，默认为"px"
          unitToConvert: 'px',
          // 视窗的宽度，对应的是我们设计稿的宽度
          viewportWidth: 375,
          // 视窗的高度，根据375设备的宽度来指定，一般指定667，也可以不配置
          viewportHeight: 667,
          // 指定`px`转换为视窗单位值的小数位数（很多时候无法整除）
          unitPrecision: 13,
          // 能转化为vw的属性列表
          propList: ['*'],
          // 指定需要转换成的视窗单位，建议使用vw
          viewportUnit: 'vw',
          // 字体使用的视口单位
          fontViewportUnit: 'vw',
          // 指定不转换为视窗单位的类，可以自定义，可以无限添加,建议定义一至两个通用的类名
          selectorBlackList: ['.ignore-', '.hairlines'],
          // 小于或等于`1px`不转换为视窗单位，你也可以设置为你想要的值
          minPixelValue: 1,
          // 允许在媒体查询中转换`px`
          mediaQuery: false,
          // 是否直接更换属性值，而不添加备用属性
          replace: true,
          // 忽略某些文件夹下的文件或特定文件，例如 'node_modules' 下的文件
          exclude: [
            /RightBar/,
            /gotop.vue/
          ],
          // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
          landscape: false,
          // 横屏时使用的单位
          landscapeUnit: 'vw',
          // 横屏时使用的视口宽度
          // landscapeWidth: 1134,
          // 横屏时使用的视口宽度
          landscapeWidth: 1334
        })
      ]
    }
  },
  build: {
    rollupOptions: {
      output: {
        // 解决打包时Some chunks are larger警告
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return id
              .toString()
              .split('node_modules/')[1]
              .split('/')[0]
              .toString()
          }
        }
      }
    },
    target: 'es2015',
    minify: 'terser',
    terserOptions: {
      compress: {
        // 生产环境时移除console.log()
        drop_console: true,
        // 生产环境时移除debugger
        drop_debugger: true
      }
    }
  }
})
